package cc.ryanc.halo.model.vo;

import cc.ryanc.halo.model.domain.Category;
import cc.ryanc.halo.model.domain.Comment;
import cc.ryanc.halo.model.domain.Tag;
import cc.ryanc.halo.model.domain.User;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import us.codecraft.webmagic.model.annotation.ExtractBy;
import us.codecraft.webmagic.model.annotation.TargetUrl;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;



@Data
@TargetUrl("https://www.oschina.net/news/\\d+")
public class PostPage  {


    private Long postId;

    /**
     * 发表用户 多对一
     */
    private User user;

    /**
     * 文章标题
     */

    @ExtractBy("//title")
    private String postTitle;

    /**
     * 文章类型
     * post  文章
     * page  页面
     */
    private String postType = "post";

    /**
     * 文章内容 Markdown格式
     */
    private String postContentMd;

    /**
     * 文章内容 html格式
     */
    @ExtractBy(value = "div.content", type = ExtractBy.Type.Css)
    private String postContent;

    /**
     * 文章路径
     */
    @ExtractBy("//href")
    private String postUrl;

    /**
     * 文章摘要
     */
    private String postSummary;

    /**
     * 文章所属分类
     */
    private List<Category> categories = new ArrayList<>();

    /**
     * 文章所属标签
     */
    private List<Tag> tags = new ArrayList<>();

    /**
     * 文章的评论
     */
    private List<Comment> comments = new ArrayList<>();

    /**
     * 缩略图
     */
    private String postThumbnail;

    /**
     * 发表日期
     */
    private Date postDate;

    /**
     * 最后一次更新时间
     */
    private Date postUpdate;

    /**
     * 0 已发布
     * 1 草稿
     * 2 回收站
     */
    private Integer postStatus = 0;

    /**
     * 文章访问量
     */
    private Long postViews = 0L;

    /**
     * 是否允许评论
     */
    private Integer allowComment = 0;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    public Date getPostDate() {
        return postDate;
    }

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    public Date getPostUpdate() {
        return postUpdate;
    }
}
